/*
 * FormatCount.java
 *
 * Created on 21 Октябрь 2008 г., 23:03
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package trim.common.inputdata;

import trim.common.*;

/**
 * Класс предназначенный для хранения пары (формат,количество)
 * Используется, например, в ВТ.
 *
 * @author Дмитрий
 */
public class FormatOrder
{

  private Format format;
  private int count=0;
  private int deltaP=0;
  private int deltaM=0;

  /** Creates a new instance of FormatCount */
  public FormatOrder()
  {
  }

  /**
   * Конструктор, запоняющий формат и количество. Отклонения равны 0.
   * @param format
   * @param count
   */
  public FormatOrder(Format format,int count)
  {
    this.count=count;
    this.format=format;
    deltaM=0;
    deltaP=0;
  }

  /**
   * Инициализирующий конструктор
   * @param format
   * @param count
   * @param deltaM
   * @param deltaP
   */
  public FormatOrder(Format format,int count,int deltaM,int deltaP)
  {
    this.count=count;
    this.format=format;
    this.deltaM=deltaM;
    this.deltaP=deltaP;
  }

  /**
   * Заказываемый формат
   * @return
   */
  public Format getFormat()
  {
    return format;
  }

  /**
   * Заказываемый формат
   * @param format Заказываемый формат
   */
  public void setFormat(Format format)
  {
    this.format=format;
  }

  /**
   * Требуемое количество
   * @return Требуемое количество
   */
  public int getCount()
  {
    return count;
  }

  /**
   * Требуемое количество
   * @param count Требуемое количество
   */
  public void setCount(int count)
  {
    this.count=count;
  }

  /**
   *
   * @param fc
   * @return
   */
  public boolean equals(FormatOrder fc)
  {

    return format.equals(fc.format)&&fc.count==count;
  }

  @Override
  public boolean equals(Object obj)
  {
    if(obj==null)
      return false;
    if(getClass()!=obj.getClass())
      return false;
    final FormatOrder other=(FormatOrder)obj;
    if(this.format!=other.format&&(this.format==null||!this.format.equals(other.format)))
      return false;
    if(this.count!=other.count)
      return false;
    if(this.deltaP!=other.deltaP)
      return false;
    if(this.deltaM!=other.deltaM)
      return false;
    return true;
  }

  @Override
  public int hashCode()
  {
    int hash=7;
    hash=53*hash+(this.format!=null?this.format.hashCode():0);
    hash=53*hash+this.count;
    hash=53*hash+this.deltaP;
    hash=53*hash+this.deltaM;
    return hash;
  }

  /**
   * Отклонение количества в меньшую сторону
   * @return Отклонение количества в меньшую сторону
   */
  public int getDeltaM()
  {
    return deltaM;
  }

  /**
   * Отклонение количества большую сторону
   * @return Отклонение количества большую сторону
   */
  public int getDeltaP()
  {
    return deltaP;
  }

  /**
   * Отклонение количества в меньшую сторону
   * @param deltaM Отклонение количества в меньшую сторону
   */
  public void setDeltaM(int deltaM)
  {
    this.deltaM=deltaM;
  }

  /**
   * Отклонение количества большую сторону
   * @param deltaP Отклонение количества большую сторону
   */
  public void setDeltaP(int deltaP)
  {
    this.deltaP=deltaP;
  }
}
